package fr.bludwarf.skywarrior.xml;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

import fr.bludwarf.commons.xml.ElementXML;
import fr.bludwarf.skywarrior.global.EtatMonde;
import fr.bludwarf.skywarrior.global.Partie;

@Root(name="partie")
public class PartieXML extends ElementXML<Partie>
{
	
	@Attribute
	int id;
	
	@Attribute
	Date debut;
	
	@ElementList(inline=true)
	ArrayList<EtatMondeXML>	etats;
	
	public PartieXML()
	{
	}

	public PartieXML(Partie partie) throws Exception
	{
		this();
		fromObject(partie);
	}

	@Override
	public Partie toObject() throws Exception
	{
		final Calendar cal = Calendar.getInstance();
		cal.setTime(debut);
		final Partie partie = new Partie(id, cal);
		
		for (final EtatMondeXML xml : etats)
		{
			final EtatMonde etatMonde = xml.toObject(partie);
			partie.add(etatMonde);
		}
		
		return partie;
	}

	@Override
	public void fromObject(Partie obj) throws Exception
	{
		id = obj.getId();
		debut = obj.getDebut().getTime();
		
		List<EtatMonde> etatsMonde = new ArrayList<EtatMonde>();
		etatsMonde.add(obj.getEtatInitial());
		if (obj.getEtatInitial() != obj.getEtatFinal())
		{
			etatsMonde.add(obj.getEtatFinal());
		}
		
		etats = new ArrayList<EtatMondeXML>();
		for (final EtatMonde etat : etatsMonde)
		{
			final EtatMondeXML xml = new EtatMondeXML(etat);
			etats.add(xml);
		}
	}

}
